package com.asen.libcommon.base.viewbind

import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.ViewModelStoreOwner
import com.asen.libcommon.bean.ToastEntity

/**
 * @date   : 2021/12/22
 * @author : asenLiang
 * @e-mail : 375427684@qq.com
 * @desc   :
 */

//TODO:activity 绑定 viewModel 拓展函数
inline fun <reified T : BaseViewModel> FragmentActivity.bindViewModel() =
    lazy {
        //ViewModelProviders.of(this).get(T::class.java) // TODO:过时弃用
        ViewModelProvider(this).get(T::class.java)
    }

//TODO:fragment 绑定 viewModel 拓展函数
//创建ViewModel，在fragment中 isActivity 当前ViewModel是否绑定Activity true：绑定在Activity中，false绑定在fragment中
inline fun <reified T : BaseViewModel> Fragment.bindViewModel(isActivity: Boolean = false) =
    lazy {
        //ViewModelProviders.of(this).get(T::class.java) // TODO:过时弃用
        val owner: ViewModelStoreOwner = if (isActivity) requireActivity() else this
        ViewModelProvider(owner).get(T::class.java)
    }

// TODO: 显示弹框工具，基于activity/fragment基础上面封装
fun BaseViewModel.loadShow(
    isShow: Boolean = false,     // 是否显示弹框
    msg: String? = "",
    isOperable: Boolean = false, // 是否可以操作：点击武利返回键或点击屏幕可以退出
    showTimeLong: Long = 0       // 显示时常（默认为0的时候正常操作，不设置时常显示）
) {
    LOADING.value = ToastEntity(msg, isOperable, isShow, showTimeLong)
}